#pragma once 

//Object's reflect file, manually write


#include "Reflection/Class.h"
#include "Reflection/Property.h"

#include "Containers/SharedObjectPtr.h"
#include "Containers/WeakObjectPtr.h"

class RObject_Reflector
{
public: 
    static CClass* GetStaticClass();

    static CClass* GenerateClass();
    static void PostConstructField();
};


#ifdef RCLASS__OF_ROBJECT
    #undef RCLASS__OF_ROBJECT
#endif 

#define RCLASS__OF_ROBJECT(...)                       \
    class RObject ;                                   \
    using RObjectPtr= TSharedObjectPtr<RObject> ;     \
    using RObjectWeakPtr= TWeakObjectPtr<RObject> ;      


#define ROBJECT_OF_ROBJECT                            \
public:                                               \
    using Super=IReflectable;                         \
    static CClass* StaticClass();                     \
    virtual CClass* GetClass() const override;        \
    static CType* StaticSharedPtrType();              \
    static CType* StaticWeakPtrType();                \
    virtual CType* GetSharedPtrType() const override; \
    virtual CType* GetWeakPtrType() const override;   \
    friend class RObject_Reflector;     

